/**
 * 项目常用api集中营
 * deptTreeDeptCode4Key - 获取组织机构树,key为机构内部编码（当前登录用户所在的组织结构）
 * dictSelect - 获取参数列表（用于下拉框展示、页面字段fmt）
 * excelExport - excel导出
 * fileDownload - 文件下载
 */
import { axios } from '@/utils/request'
import { getBaseRequestUrl, getExcelFileName } from '@/utils/samsUtil'
import { message } from 'ant-design-vue'

const api = {
  deptTreeDeptCode4Key: '/deptManager/getCurrentUserDeptTreeVoDeptCode4KeyList',
  dictSelect: '/dictManager/getDictSelectVoList',
  download: '/download/'
}

export default api

export function getDictSelect (parameter) {
  return axios.post(api.dictSelect, parameter)
}

/**
 * 获取组织机构树,key为机构内部编码（当前登录用户所在的组织结构）
 * @param parameter
 */
export function getDeptTreeDeptCode4Key (parameter) {
  axios.post(api.deptTreeDeptCode4Key, parameter).then((res) => {
    return res
  }).catch(error => {
    console.log('deptTreeDeptCode4Key请求异常...', error)
    return null
  })
}

/**
 * Excel Export
 * @param url   excel导出url
 * @param businessParam 业务请求参数(例如：表单请求对象)
 * @param excelParam  excel导出的格式对象 属性excelName、excelType
 * @returns {*}
 */
export function excelExport (url, businessParam, excelParam) {
  const query = businessParam || {}
  const excel = excelParam || {}
  // 下载后文件名
  const fileName = getExcelFileName(excel)
  return axios.post(url, { query: query, excel: excel }, { responseType: 'arraybuffer' })
    .then((res) => {
      console.log('excelExport is success ', res)
      // 创建下载的链接
      resToFileOutput(res, fileName)
      message.success('导出成功！！！')
    }).catch(error => {
      message.error('导出异常：' + error)
    })
}

/**
 * File Download 文件下载
 * @param fileName  下载的文件名
 * @returns {*}
 */
export function fileDownload (fileName) {
  return window.open(getBaseRequestUrl() + api.download + fileName)
}

/**
 * 响应流转换成file进行输出
 * @param res       响应流
 * @param fileName  文件名
 */
export const resToFileOutput = function (res, fileName) {
  const fileURL = window.URL.createObjectURL(new Blob([res]))
  const fileElement = document.createElement('a')
  fileElement.href = fileURL
  fileElement.download = fileName
  document.body.appendChild(fileElement)
  // 点击下载
  fileElement.click()
  // 下载完成移除元素
  document.body.removeChild(fileElement)
  // 释放掉blob对象
  window.URL.revokeObjectURL(fileURL)
}
